package uniandes.cupi2.tweetSpy.interfaz;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jboss.system.server.ServerConfig;
import org.jboss.system.server.ServerConfigLocator;

import twitter4j.TwitterException;
import uniandes.cupi2.tweetSpy.mundo.TweetSpy;
import uniandes.cupi2.tweetSpy.twitter.LoginTwitter;


//TODO
/**
 * Servlet que se encarga de 
 */
public class ServletHomePost extends HttpServlet {

	public final static String RUTA_ARCHIVO_SERIALIZADO = "/tweetSpy.data";

	// -----------------------------------------------------------------
	// Metodos
	// -----------------------------------------------------------------

	/**
	 * Inicializacion del Servlet
	 */
	public void init() throws ServletException {
	}

	public void destroy( ) {
		System.out.println("Destruyendo instancia");

		try {
			if (TweetSpy.getInstance() != null) {
				ServerConfig config = ServerConfigLocator.locate();
				File dataDir = config.getServerDataDir();
				File tmp = new File(dataDir + RUTA_ARCHIVO_SERIALIZADO);
				if( !tmp.exists( ) )
				{
					tmp.mkdirs();
				}
				System.out.println("Nombre=" + tmp.getName());
				System.out.println("Path=" + tmp.getPath());
				System.out.println("Abs. Path=" + tmp.getAbsolutePath());

				FileOutputStream fos = new FileOutputStream(tmp);
				ObjectOutputStream oos = new ObjectOutputStream(fos);
				oos.writeObject(TweetSpy.getInstance());
				oos.close();
				fos.close();
				System.out.println("Twitter Serializado");
			}
		} catch (Exception e) {
			System.out.println("Error de persistencia en Servidor");
		}
	}

	/**
	 * Maneja un pedido POST de un cliente 
	 * @param request Pedido del cliente
	 * @param response Respuesta
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		procesarSolicitud(request, response);
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// Maneja el GET y el POST de la misma manera
		procesarSolicitud(request, response);
	}

	/**
	 * Procesa el pedido de igual manera para todos
	 * @param request Pedido del cliente
	 * @param response Respuesta
	 * @throws IOException Excepcion de error al escribir la respuesta
	 */
	private void procesarSolicitud( HttpServletRequest request, HttpServletResponse response ) throws IOException
	{
		PrintWriter respuesta = response.getWriter( );
		try {
			if ( request.getParameter( "submit" ) != null && request.getParameter( "submit" ).equals( "registrase" ) )
			{
				if ( request.getParameter( "pin" )!= null && request.getParameter( "contrasena" ) != null )
					LoginTwitter.conectar( request.getParameter("pin"), request.getParameter( "contrasena" ) );
				else 
				{
					imprimirError(respuesta, "Faltan datos");
				}
			}
			else if ( request.getParameter( "submit" ) != null && request.getParameter( "submit" ).equals( "Login" ) )
			{
				if ( request.getParameter( "username" )!= null && request.getParameter( "password" ) != null )
					TweetSpy.getInstance( ).iniciarSecion( request.getParameter( "username" ), request.getParameter( "password" ) );
				else {
					imprimirError(respuesta, "Faltan datos");
				}
			}
			imprimeEncabezado( respuesta );
			imprimirContenido( respuesta );
		} catch (Exception e) {
			imprimirError(respuesta, e.getMessage( ) );
		}

	}

	private void imprimirContenido ( PrintWriter respuesta )
	{
		TweetSpy instancia = TweetSpy.getInstance( );
		respuesta.println("<div class=\"vertical\">");
		respuesta.println("		<figure>");
		respuesta.println("			<img src=\"" + instancia.darUrlFotoUB( ) + "\" alt=\"Jimi Hendrix\" width=\"180\" height=\"180\" />");
		respuesta.println("			<figcaption class=\"grey\">" + instancia.darScreemNameUB( ) + "</figcaption>");
		respuesta.println("		</figure>");
		respuesta.println("	</div>");
		respuesta.println("    <!-- end .sidebar1 --></div>");
		respuesta.println("  <div class=\"content\">");
		respuesta.println("    <h1>Franjas</h1>");
		respuesta.println("	<div class=\"CSSTableGenerator\" >");
		respuesta.println("                <table >");
		respuesta.println("                    <tr>");
		respuesta.println("                        <td>");
		respuesta.println("                            Madrugador");
		respuesta.println("                        </td>");
		respuesta.println("                        <td>");
		respuesta.println("                            Mainanero");
		respuesta.println("                        </td>");
		respuesta.println("                        <td>");
		respuesta.println("                            Poco productivo");
		respuesta.println("                        </td>");
		respuesta.println("                        <td>");
		respuesta.println("                            Trasnochador");
		respuesta.println("                        </td>");
		respuesta.println("                    </tr>");
		respuesta.println("                    <tr>");
		try {
			int [] franjas = instancia.generarFranjas();
			respuesta.println("                        <td >"+franjas[0]);
			respuesta.println("                        </td>");
			respuesta.println("                        <td >"+franjas[1]);
			respuesta.println("                        </td>");
			respuesta.println("                        <td >"+franjas[2]);
			respuesta.println("                        </td>");
			respuesta.println("                        <td >"+franjas[3]);
			respuesta.println("                        </td>");
		} catch (TwitterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		respuesta.println("                    </tr>");
		respuesta.println("                </table>");
		respuesta.println("	</div>");
		respuesta.println("    <h2>Clearing</h2>");
		respuesta.println("    <p>Because all the columns are floated, this layout uses overflow:hidden on the .container. This clearing technique forces the .container to understand where the columns end in order to show any borders or background colors you place on the .container. If you have a large element that protrudes outside the .container, it will appear to be cut off. You also won\'t be able to use negative margins or absolute positioning with negative values to pull elements outside the .container or they will also won\'t display outside the .container.</p>");
		respuesta.println("    <p>If you need to use these properties, you\'ll need to use a different clearing method. The most reliable will be to add a &lt;br class=&quot;clearfloat&quot; /&gt; or &lt;div  class=&quot;clearfloat&quot;&gt;&lt;/div&gt; after your final floated column (but before the .container closes). This will have the same clearing effect.</p>");
		respuesta.println("    <h3>Footer</h3>");
		respuesta.println("    <p>Adding a footer following the columns, yet still inside the .container, will cause this overflow:hidden clearing method to fail. You can place a .footer into a second .container outside the first one with no detrimental effects. The simplest choice may be to start with a layout containing headers and footers and remove the header to utilize the clearing methods in that layout type.</p>");
		respuesta.println("    <h4>Backgrounds</h4>");
		respuesta.println("    <p>By nature, the background color on any div will only show for the length of the content. This means if you\'re using a background color or border to create the look of a side column, it won\'t extend all the way to the footer but will stop when the content ends. If the .content div will always contain more content, you can place a border on the .content div to divide it from the column.</p>");
		respuesta.println("    <!-- end .content --></div>");
		respuesta.println("  <!-- end .container --></div>");
		respuesta.println("</body>");
		respuesta.println("</html>");
	}

	private void imprimirError ( PrintWriter respuesta, String e )
	{
		respuesta.println("<!DOCTYPE HTML>");
		respuesta.println("<html>");
		respuesta.println("<head>");
		respuesta.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
		respuesta.println("<title>TweetSpy</title>");
		respuesta.println("<link href=\"style/logeo.css\" rel=\"stylesheet\" type=\"text/css\">");
		respuesta.println("</head>");
		respuesta.println("");
		respuesta.println("<body>");
		respuesta.println("	<div>");
		respuesta.println("		<center>");
		respuesta.println("    		<img src=\"imagenes/mini.png\">");
		respuesta.println("            <img src=\"imagenes/spy.png\" height=\"100px\" width=\"220px\">");
		respuesta.println("    	</center>");
		respuesta.println("	</div>");
		respuesta.println("<div id=\"wrapper\">");
		respuesta.println("	<form class=\"login-form\">");
		respuesta.println("		<div class=\"header\">");
		respuesta.println("		<h1>Error</h1>");
		respuesta.println("		<span>" + e + ".</span>");
		respuesta.println("		</div>");
		respuesta.println("	</form>");
		respuesta.println("</div>");
		respuesta.println("<div class=\"gradient\"></div>");
		respuesta.println("</body>");
		respuesta.println("</body>");
		respuesta.println("</html>");}

	private void imprimeEncabezado ( PrintWriter respuesta )
	{
		respuesta.println("<!DOCTYPE HTML>");
		respuesta.println("<html>");
		respuesta.println("<head>");
		respuesta.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
		respuesta.println("<title>TweetSpy</title>");
		respuesta.println("<link href=\"style/TweetSpy.css\" rel=\"stylesheet\" type=\"text/css\">");
		respuesta.println("</head>");
		respuesta.println("<body>");
		respuesta.println("	<center>");
		respuesta.println("		<div class=\"titulo\">");
		respuesta.println("    		<img src=\"imagenes/mini.png\">");
		respuesta.println("            <img src=\"imagenes/spy.png\" height=\"100px\" width=\"220px\">");
		respuesta.println("		</div>");
		respuesta.println("    </center>");
		respuesta.println("<div class=\"container\">");
		respuesta.println("  <div class=\"sidebar1\">");
		respuesta.println("    <ul class=\"nav\">");
		respuesta.println("	  <li><a href=\"#\"><img src=\"imagenes/53-house.png\"\\> Home</a></li>");
		respuesta.println("      <li><a href=\"amigos.htm\"><img src=\"imagenes/112-group.png\"\\> Friends</a></li>");
		respuesta.println("      <li><a href=\"followers.htm\"><img src=\"imagenes/63-runner.png\"\\> Followers</a></li>");
		respuesta.println("      <li><a href=\"indicePalabras.htm\"><img src=\"imagenes/33-cabinet.png\"\\> Index</a></li>");
		respuesta.println("      <li><a href=\"#\"><img src=\"imagenes/06-magnify.png\"\\> Search</a></li>");
		respuesta.println("    </ul>");
	}

}
